今天介紹一下藍芽 Bluetooth 目前大多的裝置採用的藍牙標準(Bluetooth 4.0 以上)所有標準由藍牙技術聯盟(Bluetooth SIG),特色就是省電。分別有 BLE「低功耗藍牙」、「傳統藍牙」和 HS「高速藍牙」三種模式。
傳輸協定表格此表可以很快看清楚:
傳輸協定 | 規格 | 適用藍芽版本 | 狀態 | Adoption Date |
---|---|---|---|---|
AVCTP | A/V Control Transport | 1.4 | Active | 24 July 2012 |
AVDTP | A/V Distribution Transport | 1.3 | Active | 24 July 2012 |
BNEP | Bluetooth Network Encapsulation Protocol | 1.0 | Active | 20 February 2003 |
IrDA | IrDA Interoperability | 2.0 | Active | 26 August 2010 |
MCAP | Multi-Channel Adaptation Protocol | 1.0 | Active | 26 June 2008 |
RFCOMM | RFCOMM | 1.2 | Active | 06 November 2012 |
通用屬性配置文件(GATT)建立在屬性協議(ATT)的基礎上,並為屬性協議所傳輸和存儲的數據建立了通用操作和框架。定義了很多服務。
健康護理規範:「藍牙低功耗」裝置在醫療領域中有許多規範。康體佳健康聯盟促進了他們與藍牙技術聯盟的合作。
運動和健身規範包括:
網際網路連接:
通用感測器:
HID 連接:
接近感應:
「Electronic leash」非常適合為「始終開啟」的裝置儘可能延長電池壽命。iBeacon 裝置的製造商為其裝置實現了相應規範,確保與蘋果公司裝置的接近感應功能相容。
有關的應用程式規範包括:
提醒和時間規範:
手機提醒狀態規範和提醒通知規範允許用戶端裝置接收通知,例如另一台裝置發來的來電通知。
時間規範允許用戶端裝置設定採用伺服器裝置的目前時間和時區資訊,例如手錶與手機之間的網路時間。
電池:
電池服務(Battery Service)報告「電池狀態」和裝置中單個電池或電池組的電量級別。
GATT 協定提供了大量用於用戶端的命令以發現有關伺服器的資訊。這包括:
除此之外,也提供讀(從伺服器傳輸到用戶端)和寫(用戶端傳給伺服器)特徵值的命令:
可以指定特徵的 UUID 或控制代碼(handle)值(由上面的發現命令返回)來讀取值。
寫操作始終需要以控制代碼來標識特徵,但可選是否需要伺服器返迴響應。
長讀(Long read)和長取(Long write)可以在特徵的資料長度超過無線鏈路的最大傳輸單元(MTU)時使用。
最後,GATT 有提供通知(notifications)和指示(indications)。用戶端可以請求伺服器通知一項特徵。伺服器可以在其變為可用時將該值傳送給用戶端。例如,溫度感測器的伺服器可以在每次測量時通知其用戶端。這得以避免用戶端輪詢伺服器,造成伺服器的無線電路保持執行。
指示(indication)與通知類似,不同之處是它需要用戶端回應已收到該訊息。
那我們實繼操作:
pi@ras2:~ $ sudo hcitool lescan
LE Scan ...
3F:5B:7D:80:B0:D1 LYWSD02
88:0F:10:8F:76:7E MI_SCALE
pi@ras2:~ $ gatttool -I -b 88:0F:10:8F:76:7E
[88:0F:10:8F:76:7E][LE]> connect
Attempting to connect to 88:0F:10:8F:76:7E
Connection successful
試試 blescan:
pi@ras2:~ $ sudo apt-get install python-pip libglib2.0-dev
pi@ras2:~ $ sudo pip3 install bluepy
pi@ras2:~ $ sudo pip3 install paho-mqtt
pi@ras2:~ $ sudo blescan
Scanning for devices...
Device (new): 3f:5b:7d:80:b0:d1 (public), -42 dBm
Flags: <06>
Incomplete 16b Services: <0000181a-0000-1000-8000-00805f9b34fb>
Complete 16b Services: <0000fef5-0000-1000-8000-00805f9b34fb>
16b Service Data: <95fe70205b04d3d1b0807d5b3f090610023002>
Complete Local Name: 'LYWSD02'
Device (update): 4a:86:e0:30:a8:e0 (random), -51 dBm (not connectable)
Complete 16b Services: <0000fe9f-0000-1000-8000-00805f9b34fb>
16b Service Data: <9ffe0000000000000000000000000000000000000000>
Manufacturer: <e000003eca708bb7>
Device (new): 88:0f:10:8f:76:7e (public), -63 dBm
Flags: <06>
Incomplete 16b Services: <0000181d-0000-1000-8000-00805f9b34fb>
Complete Local Name: 'MI_SCALE'
16b Service Data: <1d18820000e0070a0f031d30>
Manufacturer: <5701880f108f767e>
pi@ras2:~ $
再來試試 bluetoothctl 這工具
pi@ras2:~ $ sudo bluetoothctl
[NEW] Controller B8:27:EB:C9:C4:A8 ras2 [default]
[NEW] Device 4C:65:A8:DA:1F:CC MJ_HT_V1
[bluetooth]# scan on
Discovery started
[CHG] Controller B8:27:EB:C9:C4:A8 Discovering: yes
[NEW] Device 3F:5B:7D:80:B0:D1 LYWSD02
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Key: 0000fe95-0000-1000-8000-00805f9b34fb
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x50
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x20
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xaa
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x01
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xc3
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xcc
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x1f
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xda
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xa8
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x65
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x4c
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x0d
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x10
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x04
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x15
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x01
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x18
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x02
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Key: 0000ffff-0000-1000-8000-00805f9b34fb
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xe7
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x9f
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x80
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x0e
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0xa2
[CHG] Device 4C:65:A8:DA:1F:CC ServiceData Value: 0x1e
[NEW] Device 4F:95:B6:D2:87:29 4F-95-B6-D2-87-29
[NEW] Device 88:0F:10:8F:76:7E MI_SCALE
[bluetooth]# quit
[DEL] Controller B8:27:EB:C9:C4:A8 ras2 [default]
pi@ras2:~ $
今天介紹 藍芽 Bluetooth 基本架構與簡單的偵測使用。